package com.lry.sso.feign;

import com.lry.sso.auth.common.dto.AuthConfigInfo;
import com.lry.sso.auth.common.util.SessionInfo;
import com.lry.sso.common.entity.response.ResultData;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * @author 李瑞益
 * @date 2020-02-12 20:58
 */
@FeignClient(name = "AUTH-SERVER")
public interface AuthFeign {

    /**
     * 获取用户公钥
     * @return 公钥
     */
    @GetMapping("/sso/auth/v1/token/public-key")
    ResultData<byte[]> getUserPublicKey();

    /**
     * 获取并保存token
     * 根据不同存储方式实现
     * @param sessionInfo 用户信息
     * @return token
     */
    @PostMapping("/sso/auth/v1/token")
    String makeToken(@RequestBody SessionInfo sessionInfo);

    /**
     * 解析加密的密码
     * @param password 密码
     * @return 明文
     */
    @PostMapping("/sso/auth/v1/token/rsa-parse")
    String parsePassword(@RequestParam("password") String password);

    /**
     * 解析验证token
     * @param token 带解析的token
     */
    @PostMapping("/sso/auth/v1/token/verify")
    SessionInfo parseToken(@RequestParam("token") String token);

    /**
     * 获取过期时间
     * @param token 带解析token
     * @return 时间毫秒数
     */
    @GetMapping("/sso/auth/v1/token/expire")
    Long getExpire(@RequestParam("token") String token) ;

    @GetMapping("/sso/auth/v1/config")
    AuthConfigInfo getAuthConfig();
}
